#include <iostream>


//浅拷贝：类中有指针成员变量，拷贝时只是进行指针拷贝，导致两个指针指向同一块内存，发生两次释放
//       地址拷贝
//深拷贝：类中有指针成员变量，拷贝时进行指针拷贝，并将指针指向的内存进行深拷贝，避免两次释放
//       不是地址拷贝，而是内容拷贝
class Test
{
public:
    Test()
    {
        std::cout<<"构造函数!\n";
        a = new int;
    }

    Test(const Test& t)
    {
        std::cout<<"深拷贝构造函数!\n";
        a = new int(*t.a);
    }

    void operator=(const Test& t)
    {
        delete a;
        std::cout << "赋值运算符重载深拷贝!\n";
        a= new int(*t.a);
    }

    ~Test()
    {
        std::cout<<"析构函数!\n";
        delete a;
    }

private:
    int *a;

};

int main()
{
    Test t;
    Test t2;
    t2 = t;
    return 0;
}